import 'package:flutter/animation.dart';
import 'package:flutter/cupertino.dart';

mixin MxAnimtion {
  //画动控制器
  late AnimationController mxController;

  //动画
  late Animation<double> mxAnimation;

  //多次打开动画
  openAnimation(List<double> list) {
    //mxController.reset();
    //mxController.forward();

  }

  // 动画结束后，如果想再触发，需要先调用mxController.reset();然后再调用mxController.forward();
  // vsync要with这个 SingleTickerProviderStateMixin
  ///初始化
  mxInit(TickerProvider vsync, {int mill = 100}) {
    //动画控制器
    mxController = AnimationController(
      duration: Duration(milliseconds: mill),
      vsync: vsync,
    );

    //动画序列:自己回到起点
    mxAnimation = TweenSequence<double>([
      TweenSequenceItem<double>(
        tween: Tween<double>(begin: 0.9, end: 1),
        weight: 0.2,
      ),
      TweenSequenceItem<double>(
        tween: Tween<double>(begin: 1, end: 1),
        weight: 0.8,
      ),
    ]).animate(mxController);

    //添加动画完成后的回调函数
    // mxController.addStatusListener((status) {
    //   if (status == AnimationStatus.completed) {
    //     // 动画值重置为0
    //     // _controller.reset();
    //     // 反向动画
    //     // _controller.reverse();

    //     // 重新开始
    //     // mxController.reset();
    //     // mxController.forward();
    //   }
    // });

    // 正向动画
    mxController.forward();
  }

  ///销毁
  mxDispose() {
    mxController.dispose();
  }

  ///动画处于完成状态
  bool mxIsEnd() {
    return mxController.isCompleted;
  }

  ///动画处于初始状态
  bool mxIsBegin() {
    return mxController.isDismissed;
  }

  ///动画价于完成和初始之间的状态，动画正在执行
  bool mxIsAnimating() {
    return mxController.isAnimating;
  }

  ///添加到组件树
  Widget mxBuild(BuildContext context) {
    return AnimatedBuilder(
      animation: mxAnimation,
      builder: (BuildContext context, Widget? child) {
        return CustomPaint(
          painter: mxPainter(),
        );
      },
    );
  }

  ///自定义的画布
  CustomPainter? mxPainter() {
    return null;
  }
}
